import 'dart:io';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';

class ContentUriHandler {
  // 将content://格式的URI保存到临时目录
  static Future<File?> saveContentUriToTempDir(String contentUri) async {
    try {
      // 1. 检查权限（Android 13+可能需要读取媒体权限）
      // if (Platform.isAndroid) {
      //   final status = await Permission.storage.request();
      //   if (!status.isGranted) {
      //     throw Exception("没有文件访问权限");
      //   }
      // }

      // 2. 通过MethodChannel调用原生方法获取文件数据
      final result = await channel.invokeMethod<Map>(
        'getContentUriData',
        {'uri': contentUri},
      );

      if (result == null || !result.containsKey('data') || !result.containsKey('mimeType')) {
        throw Exception("无法获取文件数据");
      }

      // 3. 解析文件数据和MIME类型
      final Uint8List fileData = result['data'];
      final String mimeType = result['mimeType'];
      final String? fileName = result['fileName'] ?? _getFileNameFromMimeType(mimeType);

      // 4. 获取临时目录
      final tempDir = await getTemporaryDirectory();
      final tempFilePath = '${tempDir.path}/$fileName';

      // 5. 写入临时文件
      final tempFile = File(tempFilePath);
      await tempFile.writeAsBytes(fileData);

      return tempFile;
    } on PlatformException catch (e) {
      print("保存文件失败：${e.message}");
      return null;
    } catch (e) {
      print("保存文件异常：$e");
      return null;
    }
  }

  // 从MIME类型生成默认文件名
  static String _getFileNameFromMimeType(String mimeType) {
    final extension = mimeType.split('/').last;
    return 'temp_file_${DateTime.now().millisecondsSinceEpoch}.$extension';
  }

  // 与原生通信的MethodChannel
  static late MethodChannel channel;
}
    